package com.vhall.component.entity.redpacket.vo;

import com.vhall.component.framework.common.annotation.ParamName;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @author xianglei
 * @date 2021/2/25
 */
@Data
public class RedPacketCreateReqVO implements Serializable {

    private static final long serialVersionUID = 2719341148211831087L;

    /**
     * 红包类型：0 随机金额红包（默认），1 均分金额红包
     */
    @NotNull(message = "type参数错误")
    @Range(min = 0, max = 1, message = "type参数错误")
    private Integer type;


    /**
     * 红包描述信息
     */
    private String describe;

    /**
     * 红包数量
     */
    @NotNull(message = "number参数错误")
    @Min(value = 1, message = "number参数错误")
    private Integer number;

    /**
     * 红包金额
     */
    @NotNull(message = "amount参数错误")
    @DecimalMin("0")
    private BigDecimal amount;


    @NotEmpty(message = "channel参数错误")
    @Pattern(regexp = "(WEIXIN)|(ALIPAY)", message = "取值范围:WEIXIN,ALIPAY")
    @ParamName("channel")
    private String channel;


    @NotEmpty(message = "service_code参数错误")
    @Pattern(regexp = "(QR_PAY)|(H5_PAY)|(CASHIER)|(JSAPI)", message = "取值范围:QR_PAY,H5_PAY,CASHIER,JSAPI")
    @ParamName("service_code")
    private String serviceCode;

    @NotEmpty(message = "room_id参数错误")
    @ParamName("room_id")
    private String roomId;

    /**
     * 发送表情类型：1.红包，2.礼品
     */
    @ParamName("gift_type")
    private Integer giftType = 1;

    /**
     * 如果service_code为JSAPI必传
     */
    @ParamName("open_id")
    private String openId;


    /**
     * 红包领取条件：0=无限制参与 1=分享参与 2=口令参会 3=填写问卷参与 4=邀请人数
     */
    private Integer condition = 0;

    /**
     * conditions:4 邀请人数
     */
    @ParamName("invite_num")
    private Integer inviteNum = 0;

    /**
     * 红包口令密码，当condition为2时，此字段必填
     */
    private String password;

    /**
     * 推送消息下发的频道
     */
    @ParamName("push_channel")
    private String pushChannel;

    /**
     * 红包开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ParamName("start_time")
    private LocalDateTime startTime;

    /**
     * 退款状态:
     * 0 未退款
     * 1 已退款
     * 2 退款失败
     */
    @ParamName("refund_status")
    private Integer refundStatus;

    /**
     * 领取金额
     */
    @ParamName("get_amount")
    private BigDecimal getAmount;

    /**
     * 在线人数
     */
    @ParamName("online_user_count")
    private Integer onlineUserCount;

    /**
     * 领取人数
     */
    @ParamName("get_user_count")
    private Integer getUserCount;

    /**
     * 参与人数
     */
    @ParamName("joined_user_count")
    private Integer joinedUserCount;

    /**
     * 红包支付状态：0 等待支付 1 支付成功 2 支付失败
     */
    @ParamName("pay_status")
    private Integer payStatus;

    /**
     * 支付渠道：1.微信，2.支付宝，3.余额支付，0.其他
     */
    @ParamName("pay_channel")
    private Boolean payChannel;

    /**
     * 红包支付交易流水号
     */
    @ParamName("trade_no")
    private String tradeNo;

    /**
     * 扩展字段
     */
    private String ext;

    /**
     * 是否已删除 0 表示未删除 1 表示已删除
     */
    private Integer deleted;

    /**
     * 创建时间
     */
    @ParamName("created_at")
    private LocalDateTime createdAt;

    /**
     * 删除时间
     */
    @ParamName("deleted_at")
    private LocalDateTime deletedAt;

    /**
     * 更新时间
     */
    @ParamName("updated_at")
    private LocalDateTime updatedAt;

}
